package com.atguigu.gulimall.product.vo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * 2级分类Vo
 */
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Catelog2Vo {
    private String catalog1Id;//1级父分类id
    private List<Catelog3Vo> catalog3List;//三级子分类List
    private String id;
    private String name;

    /**
     * 三级分类Vo
     * 这里使用static静态内部类有诸多好处：
     * 第一 如果3Vo定义在外部，体现不了关联性
     * 第二 如果定义在内部 没有使用static的话 那么意味着 当我需要创建一个3Vo的实例时，都需要先有一个2Vo我才能创建。非常的麻烦
     * 第三 如果 Catelog3Vo 是非静态的，意味着它与 Catelog2Vo 实例有一种紧密的关联。尤其是如果 Catelog3Vo 是一个相对独立的数据对象。这可能会导致想要将其作为独立实体来使用时出现问题。
     * 第四 在非静态内部类中，内部类持有外部类的引用。如果外部类的生命周期比内部类长，那么内部类的实例可能会导致外部类实例无法被垃圾回收（更复杂的情况可能出现内存泄漏）。
     *
     * 并且这里在定义静态内部类后，并没有设置外层的变量为static ，如果外层的一些变量设置成static后 那么所有的3Vo实例都将共享外部的static变量，没有这个必要。
     */
    @AllArgsConstructor
    @NoArgsConstructor
    @Data
    public static class Catelog3Vo{
        private String catalog2Id;//父分类，2级分类id
        private String id;
        private String name;
    }
}
